/**
 * Create by 少凡
 * 2018/5/17
 */
import {FormControl} from '@angular/forms';

/**
 * 公用验证方法
 * @param control
 * @param reg  正则表达式
 * @param errorMsg  错误提示
 * @param paramName  验证的名字，只用作打印，可不传
 * @returns {any}
 */
function valid(control, reg, errorMsg, validName?): any {
  let valid = reg.test(control.value);
  console.log(validName + "的校验结果是： " + valid);
  return valid ? null : {error: {description: errorMsg}};
}

export function validRegion(control: FormControl): any {
  let valid = control.value != '-1';
  // console.log("地区的校验结果是： " + valid);
  return valid ? null : {region: true};
}

export function validMobile(control: FormControl): any {
  let reg = /^1[0-9]{10}$/;
  return valid(control, reg, '请输入有效手机号', 'mobile');
}

/** 客户电话 前面是固定电话正则（区号+座机号码+分机号码），后面是手机号正则 */
export function validTelephone(control: FormControl): any {
  let reg = /^((\d{3,4}|\d{3,4}-)?\d{7,8}|(0?(13[0-9]|15[012356789]|17[013678]|18[0-9]|14[57])[0-9]{8}))$/;
  return valid(control, reg, '请输入有效电话', 'telephone');
}

/** 中文名，小数民族含特殊圆点通用 */
export function validChinese(control: FormControl): any {
  let reg = /^[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*$/;
  return valid(control, reg, '请输入真实姓名', 'ChineseName');
}

/** 最多50个汉字或字符，可以包含特殊字符 */
export function validMerchantName(control: FormControl): any {
  let reg = /^([\u4E00-\u9FA5]|.){1,50}$/;
  return valid(control, reg, '请输入50个以内的汉字或字符', 'merchantName');
}

/** 可包含汉字、数字、字母，可全为数字，最多20个汉字或字符 */
export function validAlias(control: FormControl): any {
  let reg = /^([\u4E00-\u9FA5]|[a-zA-Z]|[0-9]|.){1,20}$/;
  return valid(control, reg, '请输入20个以内的汉字或字符(特殊符号除外)', 'alias');
}

export function validEmail(control: FormControl): any {
  let reg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
  return valid(control, reg, '请输入有效邮箱地址', 'email');
}

/** 身份证验证 */
export function validIdCard(control: FormControl): any {
  let reg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
  return valid(control, reg, '请输入有效身份证号', 'idCard');
}

/** 营业执照工商注册号 */
export function validBussAuthNum(control: FormControl): any {
  let reg = /(^(?:(?![IOZSV])[\dA-Z]){2}\d{6}(?:(?![IOZSV])[\dA-Z]){10}$)|(^\d{15}$)/;
  return valid(control, reg, '请输入有效营业执照号码', 'bussAuthNum');
}

/** 银行卡 首位不为0，13到19位*/
export function validBankCard(control: FormControl): any {
  let reg = /^([1-9]{1})(\d{12,18})$/;
  return valid(control, reg, '请输入有效银行卡号', 'bankCardNo');
}

/** 金额 最多两位小数*/
export function validMoney(control: FormControl): any {
  // let reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
  let reg = /(^[1-9](\d+)?(\.\d{1,2})?$)|(^0$)|(^\d\.\d{1,2}$)/;
  return valid(control, reg, '请输入有效金额(不能超过两位小数)', 'money');
}

/** 金额 为100的倍数*/
export function validMoneyMultiple(control: FormControl): any {
  let reg = /^[1-9]\d*00$/;
  return valid(control, reg, '请输入有效金额(金额为100的倍数)', 'moneyMultiple');
}

/** 费率 最多三位小数*/
export function validFee(control: FormControl): any {
  let reg = /^(([1-9])|([0-9]\.\d{1,3}))$/;
  return valid(control, reg, '请输入有效费率(不能超过三位小数)', 'fee');
}

/** 日期
 *  ^(((([0-9]{2})(0[48]|[2468][048]|[13579][26]))   #闰年，能被4整除但不能被100整除
 *   |((0[48]|[2468][048]|[13579][26])00))           #闰年，能被400整除
 *    -02-29)                                       #匹配闰年2月29日这一天。如果不是这一天，则由下面式子继续匹配验证。
 *    |(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})     #平年（0001-9999）
 *    -(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))                                  #月日，1、3、5、7、8、10、12月有31天
 *   |((0[469]|11)-(0[1-9]|[12][0-9]|30))                                            #月日，4、6、9、11月有30天
 *   |(02-(0[1-9]|[1][0-9]|2[0-8]))))                                                 #平年2月只有28天，月日表示为【02-01至02-28】
 * */
export function validDate(control: FormControl): any {
  let reg = /^(((([0-9]{2})(0[48]|[2468][048]|[13579][26]))|((0[48]|[2468][048]|[13579][26])00))-02-29)|(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))$/;
  return valid(control, reg, '请输入有效日期，长期请输入9999-12-31', 'date');
}

export function validDigits(control: FormControl): any {
  let reg = /^[1-9]{1,}[\d]*$/;
  return valid(control, reg, '请输入正整数', 'digits');
}




